<?php
/**
 * @name eolinker ams open source，eolinker开源版本
 * @link https://www.eolinker.com/
 * @package eolinker
 * @author www.eolinker.com 广州银云信息科技有限公司 2015-2017
 * eoLinker是目前全球领先、国内最大的在线API接口管理平台，提供自动生成API文档、API自动化测试、Mock测试、团队协作等功能，旨在解决由于前后端分离导致的开发效率低下问题。
 * 如在使用的过程中有任何问题，欢迎加入用户讨论群进行反馈，我们将会以最快的速度，最好的服务态度为您解决问题。
 *
 * eoLinker AMS开源版的开源协议遵循Apache License 2.0，如需获取最新的eolinker开源版以及相关资讯，请访问:https://www.eolinker.com/#/os/download
 *
 * 官方网站：https://www.eolinker.com/
 * 官方博客以及社区：http://blog.eolinker.com/
 * 使用教程以及帮助：http://help.eolinker.com/
 * 商务合作邮箱：market@eolinker.com
 * 用户讨论QQ群：284421832
 */

namespace RTP\Module;

Class RegistryModule
{
	private static $registry = NULL;
	private static $instance;

	/**
	 * 获取实例
	 */
	public static function getInstance()
	{
		//如果已经含有一个实例则直接返回实例
		if (!is_null(self::$instance))
		{
			return self::$instance;
		}
		else
		{
			//如果没有实例则新建
			return self::getNewInstance();
		}
	}

	/**
	 * 获取一个新的实例
	 */
	public static function getNewInstance()
	{
		self::$instance = null;
		self::$instance = new self;
		return self::$instance;
	}

	protected function __construct()
	{
		if (is_null(self::$registry))
			self::$registry = array();
	}

	/**
	 * 获取全局变量
	 */
	public static function get($name)
	{
		if (isset(self::$registry[$name]))
			return self::$registry[$name];
		return NULL;
	}

	/**
	 * 设置全局变量
	 */
	public static function set($name, $value)
	{
		if (is_null(self::$registry))
			self::$registry = array();
		self::$registry[$name] = $value;
	}

	/**
	 * 删除全局变量
	 */
	public static function del($name)
	{
		unset(self::$registry[$name]);
	}

	/**
	 * 将数组输入全局变量
	 */
	public static function setArray($array, $overWrite = FALSE)
	{
		while ($kv = each($array))
		{
			//如果已经存在重复的键,则覆盖之前的值
			if ($overWrite && isset(self::$registry[$kv[0]]))
				self::$registry[$kv[0]] = $kv[1];
			//否则跳过相同的键
			else
			if (isset(self::$registry[$kv[0]]))
				continue;
			else
				self::$registry[$kv[0]] = $kv[1];
		}
	}

	/**
	 * 获取全局变量数组
	 */
	public static function getAll()
	{
		return self::$registry;
	}

	/**
	 * 清除所有全局变量
	 */
	public static function clean()
	{
		unset(self::$registry);
		self::$registry = NULL;
	}

}
?>